package com.imooc.SmartChargeStation.demo.netty.handlers;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;

/**
 * author: zpy
 * description: 客户端自定义处理器
 * date: 2025/8/21
 */

@Slf4j
/*
    怎么理解Netty ByteBuf子类？
    是一个存储和操作字节数据的容器，代替了Java NIO中的ByteBuffer
    主要从三个维度进行理解：
    1.内存管理方式：池化 (PooledByteBuf)和非池化 (UnpooledByteBuf)
    2.内存区域：堆内存 (HeapByteBuf)和非堆内存 (DirectByteBuf)
    3.零拷贝：非用户态和内核态之间的零拷贝（CompositeByteBuf）

    怎么创建非池化ByteBuf对象？

    如何将数据发送出去，步骤是什么？
 */
public class ImoocClientHandler extends SimpleChannelInboundHandler<ByteBuf> {
    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf) throws Exception {

    }

    /**
     * description: 通道准备就绪的时候触发
     */
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
       String str = "你好服务端, 这条信息发自客户端";

       ctx.writeAndFlush(Unpooled.copiedBuffer(str.getBytes()));

    }
}
